package org.jsola.hr.dto;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.Valid;
import java.util.Date;
import java.util.List;

import static org.jsola.core.example.BaseExample.E_ID;
import static org.jsola.core.example.BaseExample.N_ID;

/**
 * @author zhr
 */
@EqualsAndHashCode(callSuper = true)
@ApiModel(description = "【员工信息】待入职的所有的参数")
@Data
public class EmpAllInfoAddDTO extends EmpInfoAddDTO {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(notes = N_ID, example = E_ID)
    private String id;

    @Valid
    @ApiModelProperty(notes = "员工家庭成员")
    private List<EmpFamilyDTO> empFamilyList;

    @Valid
    @ApiModelProperty(notes = "员工奖惩记录信息")
    private List<EmpRewardPunishDTO> empRewardPunishList;

    @Valid
    @ApiModelProperty(notes = "员工工作经历")
    private List<EmpWorkDTO> empWorkList;

    @Valid
    @ApiModelProperty(notes = "员工联系人")
    private List<EmpContactsDTO> empContactsList;

    @Valid
    @ApiModelProperty(notes = "员工合同信息")
    private List<EmpContractDTO> empContractList;

    @Valid
    @ApiModelProperty(notes = "员工教育经历")
    private List<EmpEducationDTO> empEducationList;

    @Valid
    @ApiModelProperty(notes = "员工证件信息")
    private List<EmpCardDTO> empCardList;

    @Valid
    @ApiModelProperty(notes = "员工培训记录")
    private List<EmpTrainDTO> empTrainList;

    @Valid
    @ApiModelProperty(notes = "员工证书")
    private List<EmpCertificateDTO> empCertificateList;

    @Valid
    @ApiModelProperty(notes = "部门ID列表")
    private List<String> depIdList;

    @Valid
    @ApiModelProperty(notes = "岗位ID列表")
    private List<String> positionIdList;

    @ApiModelProperty(notes = "审批模板id")
    private String flowId;

    @ApiModelProperty(notes = "租户id")
    private String siteId;

    @ApiModelProperty(notes = "预登记人员id")
    private String checkInId;

    @ApiModelProperty(notes = "自定义字段")
    private List<AddEmpFieldDTO> addEmpFieldList;

    @ApiModelProperty(notes = "操作人的用戶ID")
    private String operationUserId;


    @ApiModelProperty(notes = "成员姓名")
    private String familyName;

    @ApiModelProperty(notes = "联系电话")
    private String familyPhone;

    @ApiModelProperty(notes = "与我的关系（家庭成员）")
    private String familyRelation;

    @ApiModelProperty(notes = "工作单位")
    private String familyWorkUnit;

    @ApiModelProperty(notes = "联系人姓名")
    private String contactsName;

    @ApiModelProperty(notes = "联系电话")
    private String contactsPhone;

    @ApiModelProperty(notes = "与我的关系（紧急联系人）")
    private String contactsRelation;

    @ApiModelProperty(notes = "联系人地址")
    private String contactsAddress;

    @ApiModelProperty(notes = "起缴时间")
    private String startPaymentDate;

    @ApiModelProperty(notes = "参保城市")
    private String insuredCity;

    @ApiModelProperty(notes = "动态码")
    private String code;

    @ApiModelProperty(notes = "身份证国徽面")
    private String idCardFront;

    @ApiModelProperty(notes = "身份证人像面")
    private String idCardBack;

    /*******************************奖惩记录*****************************/
    /**
     * 奖惩类型（1：奖励，2：惩罚）
     */
    private Integer rewardPunish;
    /**
     * 奖励类别（1：通报表扬，2：年度优秀员工奖，3：特殊贡献奖）
     */
    private Integer rewardType;
    /**
     * 惩罚类别（1：通报批评，2：警告，3：严重警告，4：记过处分，5：辞退处分）
     */
    private Integer punishType;
    /**
     * 奖惩日期
     */
    private Date handleDate;
    /**
     * 奖惩内容
     */
    private String content;
    /**
     * 奖惩金额
     */
    private Integer amount;
    /**
     * 奖惩原因
     */
    private String reason;
    /**
     * 奖惩备注(原remark)
     */
    private String rewardsRemark;

    /*****************************************教育经历*************/
    /**
     * 学历（1：小学，2：初中，3：中专，4：高中，5：大专，6：本科，7：硕士，8：博士，9：其他）
     */
    private Integer education;
    /**
     * 毕业院校
     */
    private String graCollege;
    /**
     * 专业
     */
    private String major;
    /**
     * 入学时间 startTime
     */
    private Date eduStartTime;
    /**
     * 毕业时间 endTime
     */
    private Date eduEndTime;
    /**
     * 教学方式（1：统招全日制，2：自考，3：成考，4：其他）
     */
    private String teaMethods;
    /**
     * 毕业证书编号
     */
    private String graCerNumber;
    /**
     * 学位类型（1：学士，2：硕士，3：博士，4：未获得学位）
     */
    private Integer degreeType;
    /**
     * 学位名称
     */
    private String degreeName;
    /**
     * 学位证书编号
     */
    private String degreeNumber;
    /**
     * 教育备注
     */
    private String educationRemark;

    /****************员工工作经历****************/
    /**
     * 公司名称
     */
    private String company;
    /**
     * 岗位
     */
    private String position;
    /**
     * 开始时间 startTime
     */
    private Date workStartTime;
    /**
     * 结束时间 endTime
     */
    private Date workEndTime;
    /**
     * 离职原因
     */
    private String leaveReason;
    /**
     * 离职薪资
     */
    private Integer leaveSalary;
    /**
     * 工作备注 remark
     */
    private String workRemark;
    /**
     * 证明人
     */
    private String witName;
    /**
     * 证明人联系电话
     */
    private String witPhone;

    /*****************培训经历*********************/

    /**
     * 培训课程
     */
    private String trainCourse;
    /**
     * 培训开始时间 startTime
     */
    private Date trainStartTime;
    /**
     * 培训结束时间 endTime
     */
    private Date trainEndTime;
    /**
     * 培训时长
     */
    private String trainDuration;
    /**
     * 培训机构名称
     */
    private String trainOrgName;
    /**
     * 考核结果,成绩
     */
    private String assessResult;
    /**
     * 培训地点
     */
    private String trainAddress;
    /**
     * 培训方式
     */
    private String trainMode;
    /**
     * 培训证书名称
     */
    private String trainCerName;
    /**
     * 培训证书编号
     */
    private String trainCerNumber;
    /**
     * 培训备注,补充信息 remake
     */
    private String remake;

}

